package com.xf.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xf.common.core.domain.DmpResult;
import com.xf.common.core.entity.dmp.DmpAuthUser;
import com.xf.common.core.entity.dmp.RegisterUserDto;
import com.xf.common.core.entity.system.DmpUserAssignDto;
import com.xf.common.core.entity.system.SystemUser;
import com.xf.common.core.exception.FebsException;

/**
 * @author JoeyLiu
 * @create 2022-04-01 13:59
 */
public interface DmpAuthUserService extends IService<DmpAuthUser> {


    /**
     * 查找用户详细信息
     *
     * @param page request
     * @param aliasOrName    用户对象，用于传递查询条件
     * @return IPage
     */

    IPage<DmpAuthUser> page(IPage page, String aliasOrName, Integer state);

    /**
     *
     * @param dmpUserAssignDto
     * @return
     */
    DmpResult assign(DmpUserAssignDto dmpUserAssignDto );
    /**
     * 通过用户名查找用户详细信息
     *
     * @param username 用户名
     * @return 用户信息
     */
    DmpAuthUser findUserDetail(String username);

    /**
     * 更新用户登录时间
     *
     * @param username username
     */
    void updateLoginTime(String username);

    /**
     * 新增用户
     *
     * @param user user
     */
    void createUser(DmpAuthUser user);

    /**
     * 修改用户
     *
     * @param user user
     */
    void updateUser(DmpAuthUser user);

    /**
     * 删除用户
     *
     * @param userIds 用户 id数组
     */
    void deleteUsers(String[] userIds);

    /**
     * 更新个人信息
     *
     * @param user 个人信息
     * @throws FebsException 异常
     */
    void updateProfile(DmpAuthUser user) throws FebsException;

    /**
     * 更新用户头像
     *
     * @param avatar 用户头像
     */
    void updateAvatar(String avatar);

    /**
     * 更新用户密码
     *
     * @param password 新密码
     */
    void updatePassword(String password);

    /**
     * 重置密码
     *
     * @param usernames 用户集合
     */
    void resetPassword(String[] usernames);



    /**
     * 查询用户code
     * bbt
     *
     * @param userCode
     * @return
     */
    DmpResult<DmpAuthUser> selectByUserCode(String userCode);

    /**
     * 查询用户名称和邮箱
     * bbt
     *
     * @param user
     * @return
     */
    DmpResult<DmpAuthUser> selectByNameOrEmail(String user);


    /**
     * 获取用户
     * 用户登录
     *
     * @param username 用户名
     * @return 用户
     */
    SystemUser findByName(String username);

    /**
     * 根据手机号获取用户
     * 用户登录
     *
     * @param mobile
     * @return
     */
    DmpResult<SystemUser> findByMobile(String mobile);

    /**
     * 注册用户
     *
     * @return
     */
    DmpResult<SystemUser> registUser(RegisterUserDto registerUserDto);

    /**
     * 查询openId
     *
     * @param openId
     * @return
     */
    DmpResult<SystemUser> findByOpenId(String openId);
}
